package ClassificationAlgorithm;

import java.util.ArrayList;

import Definitions.GraphClass;
import Definitions.NodeClass;
import Global.GlobalClass;
import LocalClassifier.LocalClassifierInterface;
import Result.ResultClass;
import Sampling.SamplingAbstractClass;

public interface CollectiveClassificationAlgorithmClass {
	
	public void Run(SamplingAbstractClass currentSampling, ResultClass result);
	String getName();
	void initialize();
	void setName(String name);
	public ResultClass TrainForGlobalAlpha(GraphClass graph, GlobalClass global, SamplingAbstractClass prevSampling,int foldNo);
	public ResultClass TrainForLocalAlpha(ArrayList<NodeClass> nodeListToBeUsedForTrain, int foldNo, SamplingAbstractClass currentSampling);
	public ResultClass TestWithForAlpha(ArrayList<NodeClass> nodeListToBeTested, SamplingAbstractClass prevSampling, ResultClass result, int foldNo);
	public 	double[] TestNodeForAlpha(NodeClass nodeToBeTested, SamplingAbstractClass prevSampling, int foldNo);
	//public void trainAndTestWithTheGivenNodeLists(ArrayList<NodeClass> nodeListForTrain, ArrayList<NodeClass> nodeListForTest);
	
	public double[] getProbabilityDistributionForTheGivenNode(NodeClass i);
	
	public LocalClassifierInterface getLocalClassifierSelected();
	
	
	
	/****************************************************************************/
	/**
	 * TODO(KADRIYEB) Implement this new methods for refactoring.
	 */
	public void Prepare();
	public ResultClass TestAlgorithm();
	public void report();
	
	/****************************************************************************/
}
